package _220317;

import java.io.*;
import java.nio.Buffer;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author ShadowLim
 * @create 2022-03-17-16:50
 */
public class _全球变暖 {

//    /**
//     *  218ms
//     * @param args
//     * @throws IOException
//     */
//    public static void main(String[] args) throws IOException {
//        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//        int n = Integer.parseInt(in.readLine());
//        char[][] arr = new char[n][n];
//        boolean[][] f = new boolean[n][n];
//        int sum = 0;
//        for (int i = 0; i < n; i++) {
//            String s = in.readLine();
//            for (int j = 0; j < n; j++) {
//                arr[i][j] = s.charAt(j);
//                if (arr[i][j] == '#') {
//                    f[i][j] = true;
//                }
//            }
//        }
//        for (int i = 0; i < n; i++) {
//            for (int j = 0; j < n; j++) {
//                if (arr[i][j] == '#' && f[i][j]) {
//                    if (!bfs(arr, f, i, j, n)) {
//                        sum++;
//                    }
//                }
//            }
//        }
//        System.out.println(sum);
//    }
//
//    // 返回为true，表示未被完全淹没
//    private static boolean bfs(char[][] arr, boolean[][] f, int x, int y, int n) {
//        Queue<Integer> qX = new LinkedList<>();
//        Queue<Integer> qY = new LinkedList<>();
//        int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; // 下 右 上 左
//        boolean flag = false;   // 是否临海
//        qX.offer(x);
//        qY.offer(y);
//        f[x][y] = false;
//        while (!qX.isEmpty()) {
//            int pollX = qX.poll();
//            int pollY = qY.poll();
//            for (int i = 0; i < 4; i++) {
//                int nx = pollX + dirs[i][0];
//                int ny = pollY + dirs[i][1];
//                if (nx >= 0 && nx < n && ny >= 0 && ny < n && f[nx][ny]) {
//                    qX.offer(nx);
//                    qY.offer(ny);
//                    f[nx][ny] = false;
//                    //判断是否临海
//                    if (!flag) {
//                        if (arr[nx + dirs[0][0]][ny + dirs[0][1]] == '#' &&
//                                arr[nx + dirs[1][0]][ny + dirs[1][1]] == '#' &&
//                                arr[nx + dirs[2][0]][ny + dirs[2][1]] == '#' &&
//                                arr[nx + dirs[3][0]][ny + dirs[3][1]] == '#') {
//                            flag = true;
//                        }
//                    }
//                }
//            }
//        }
//        return flag;
//    }

    /**
     * 202ms
     */
    static int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer in = new StreamTokenizer(br);
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int n = (int) in.nval;
        char[][] graph = new char[n][n];
        for (int i = 0; i < n; i++) {
            graph[i] = br.readLine().toCharArray();
        }

        int prev = 0, after = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (graph[i][j] == '#') {
                    prev++;
                    if (isIlands(graph, i, j) > 0) {
                        after++;
                    }
                }
            }
        }
        pw.println(prev - after);
        pw.flush();
    }

    private static int isIlands(char[][] graph, int x, int y) {
        int cnt = 0;
        int n = graph.length;
        // 判断当前位置是否邻接水域
        for (int[] d : dirs) {
            int nx = x + d[0];
            int ny = y + d[1];
            if (nx < 0 || ny < 0 || nx >= n || ny >= n || graph[nx][ny] != '.') {
                continue;
            }
            graph[x][y] = '-';  // 邻接水域，被淹没 置换为其他字符
        }

        // 判断变暖后是否仍然是岛屿
        if (graph[x][y] == '#') {
            graph[x][y] = '+';  // 已经遍历过 置换为其他字符
            cnt++;
        }
        for (int[] d : dirs) {
            int nx = x + d[0];
            int ny = y + d[1];
            if (nx < 0 || ny < 0 || nx >= n || ny >= n) {
                continue;
            }
            // 继续遍历没有遍历过的岛屿
            if (graph[nx][ny] == '#') {
                cnt += isIlands(graph, nx, ny);
            }
        }
        return cnt;
    }

}
